package com.trade.common.utils;

/**
 * Class Description:
 *
 * @Version v1.0 2017/4/22 3:20
 * @JDK version 1.8.0_51
 * @Author zfb
 */
public class Test {
    public static Test t = new Test();

    private static int a;

    private static int b = 0;

    private Test() {
        a++;
        b++;
    }

    private void printAB() {
        System.out.println(a + "," + b);
    }

    /**
     * @param args
     */
    public static void main(String args[]) {
        new Test().printAB();
    }

    /*
     * 执行顺序：
     1、运行30行的new，创建对象。

     2、第11行创建对象时，因为Test中的a和b都是static的，所以，对a和b进行初始化。

     3、因为有b=0的语句，所以将0赋值给b。

     4、进入构造方法，a和b的值自增。

     5、t的创建就好了。继续，因为a已经被初始化过一次，所以不再进行初始化动作。而b=0是赋值语句，所以b的值再次变为0。此时a=1,b=0;

     6、进入构造方法创建对象，自增。

     7、打印a和b的值。出来的结果就是2和1了。
     */
}
